#include <stdio.h>
#include <omp.h>

// unroll_partial_remainder_option2 函数
void unroll_partial_remainder_option2(int n, int A[])
{
    #pragma omp parallel for
    for (int i_iv = 0; i_iv < (n + 3) / 4; ++i_iv) {
        if (i_iv < n / 4) {
            A[i_iv * 4 + 0] = i_iv * 4 + 0;
            A[i_iv * 4 + 1] = i_iv * 4 + 1;
            A[i_iv * 4 + 2] = i_iv * 4 + 2;
            A[i_iv * 4 + 3] = i_iv * 4 + 3;
        } else {
            // remainder loop
            for (int i_rem = i_iv * 4; i_rem < n; ++i_rem)
                A[i_rem] = i_rem;
        }
    }
}

int main() {
    int n = 10; // 可以根据需要修改数组大小
    int A[10];  // 这里的数组大小要和上面的 n 匹配

    // 调用 unroll_partial_remainder_option2 函数
    unroll_partial_remainder_option2(n, A);

    // 输出数组元素以验证结果
    printf("数组元素如下:\n");
    for (int i = 0; i < n; ++i) {
        printf("A[%d] = %d\n", i, A[i]);
    }

    return 0;
}    